/**
 * @Description: url工具
 * @Author: simon<simon@sayto.top>
 * @Date: 2020年04月07日18:06:11
 * @module url
 */

/**
 * @description 获取href里面的query参数
 * @param {String} name 要获取的query key
 * @return {string}
 */
export function getQueryString(name,path=window.location.search) {
  let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)')
  if (path.indexOf('=') > -1) {
    let r = path.substr(1).match(reg)
    if (r) {
      return decodeURIComponent(r[2])
    }
  }
  return ''
}

/**
 * @description 为一个地址添加query参数
 * @param {String} url 要添加参数的地址
 * @param {String} name 参数key
 * @param {String | Number} value 参数值
 * @return {String} 新的地址
 */
export function addQueryString(url, name, value) {
  let currentUrl = url.split('#')[0]
  if (/\?/g.test(currentUrl)) {
    if (/name=[-\w]{4,25}/g.test(currentUrl)) {
      currentUrl = currentUrl.replace(/name=[-\w]{4,25}/g, name + '=' + value)
    } else {
      currentUrl += (currentUrl.endsWith('?') ? '' : '&') + name + '=' + value
    }
  } else {
    currentUrl += '?' + name + '=' + value
  }
  if (url.split('#')[1]) {
    return currentUrl + '#' + url.split('#')[1]
  } else {
    return currentUrl
  }
}

/**
 * @description 删除地址里的query参数
 * @param {String} url 要删除参数的地址
 * @param {String} name 参数key
 * @return {String} 新的地址
 */
export function deleteQueryString(url, name) {
  let reg = new RegExp('(|&)' + name + '=([^&/#]*)')
  let str = url.match(reg)
  if (str && str[0]) {
    let newUrl = url.replace(str[0], '')
    return newUrl.replace('?&', '?').replace('?#', '#')
  }
  return url
}

/**
 * @description 将对象转换为url参数
 * @param {Object} obj 要转换的对象
 * @return {string} 转换后的url字符串
 */

export function json2params(obj) {
  let keys = Object.keys(obj)
  let str = ''
  keys.forEach((e) => {
    let v = ''
    // eslint-disable-next-line
    if (obj[e] != null) {
      v = obj[e]
    }
    str += e + '=' + v + '&'
  })
  if (str) str = str.substring(0, str.length - 1)
  return str
}

function getProtocol(url = '') {
  let proto = '' // 获取请求协议
  if (url.startsWith('http://')) {
    proto = 'http://'
  } else if (url.startsWith('https://')) {
    proto = 'https://'
  }
  return proto
}

function clearHost(url = '') {
  let protocol = getProtocol(url)
  if (protocol) {
    url = url.replace(protocol, '')
    let domain = url.split('/')[0] // 有协议就有domain
    url = url.replace(domain, '')
  }
  return url
}

/**
 * @description 获取请求路径
 * @param {String} url 请求的url
 * @return {string} 获取请求的相对路径
 */
export function getApiPath(url = '') {
  url = clearHost(url)
  return url.split('?')[0]
}

/**
 * @description 替换host
 * @param {String} url 请求地址，可以使绝对也可以是相对
 * @param {String} host 要替换的host地址
 * @return {string} 替换完成的url
 */
export function replaceHost(url = '', host = '') {
  // 去除原host
  url = clearHost(url)
  // 添加host
  return host + url
}
